#include <iostream>
#include <algorithm>
#include <vector>
typedef long long ll;
using namespace std;


//class Solution {
//public:
//    bool check(int x, vector<int>& position, int m) {
//        int cnt = 1;
//        int pre = 0;
//        for (int i=0; i < position.size(); i++) {
//            if (position[i] - position[pre] >= x) {
//                cnt++;
//                pre = i;
//            }
//        }
//        return cnt >= m;
//    }
//
//    int maxDistance(vector<int>& position, int m) {
//        sort(position.begin(), position.end());
//        int n = position.size();
//        int l = 0, r = position[n - 1], mid;
//        while (l < r) {
//            mid = (l + r + 1) >> 1;
//            if (check(mid, position, m))
//                l = mid;
//            else
//                r = mid - 1;
//        }
//        return r;
//    }
//};
//
//int main() {
//    Solution a;
//    vector<int> b = { 1,2,3,4,5,6,7,8,9,10 };
//    int m = 4;
//    
//    int ans =a.maxDistance(b, m);
//    cout << ans;
//	return 0;
//}

//int n, m, k;
//int f[400005];
//
//vector<int> e[400005];
//int broken[400005];
//int Broken[400005];
//int ans[400005];
//
//int find(int x) {
//	return f[x] == x ? x : f[x] = find(f[x]);
//}
//
//int main() {
//	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
//	cin >> n >> m;
//	for (int i = 1; i <= n; i++) {
//		f[i] = i;
//	}
//	for (int i = 0,u,v; i < m; i++) {
//		cin >> u >> v;
//		e[u].push_back(v);
//		e[v].push_back(u);
//	}
//	cin >> k;
//	for (int i = 1; i <= k; i++) {
//		cin >> broken[i];
//		Broken[broken[i]] = 1;
//	}
//	int tot = n - k;
//	for (int i = 1; i <= n; i++) {
//		if (Broken[i])
//			continue;
//		for (int j = 0; j < e[i].size(); j++) {
//			int u = i, v = e[u][j];
//			int fu = find(u), fv = find(v);
//			if (!Broken[v] && fu != fv) {
//				tot--;
//				f[fu] = fv;
//			}
//		}
//	}
//	ans[k+1] = tot;
//	for (int i = k; i >= 1; i--) {
//		tot++;
//		int u = broken[i];
//		Broken[u] = 0;
//		for (int j = 0; j < e[u].size(); j++) {
//			int v = e[u][j];
//			int fu = find(u), fv = find(v);
//			if (!Broken[v] && fu != fv) {
//				tot--;
//				f[fu] = fv;
//			}
//		}
//		ans[i] = tot;
//	}
//
//	for (int i = 1; i <= k+1; i++) {
//		cout << ans[i] << '\n';
//	}
//
//	return 0;
//}